home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2006 May / PCWMAY06.iso / Software / Freeware / First Page 2006 3.00 / fp2006-final-3.00-setup.exe / {app} / Iscripts / Forms Misc / format-date.izs < prev    next >
Text File  |  2005-09-28  |  29KB  |  1,090 lines

  1. <!NOWIZARD>
  2.  
  3. <!TITLE>Format Date
  4. <!/TITLE>
  5.  
  6. <!DESCRIPTION>Automatically formats date fields as the user enters the information. Also validates the date when complete date has been entered. Cross browser compatible, including Netscape 6+. <!/DESCRIPTION> 
  7.  
  8. <!CATEGORY>Forms<!/CATEGORY>
  9.  
  10. <!SCRIPT>
  11. <!-- START OF SCRIPT -->
  12.  
  13. <!-- HOW TO INSTALL FORMAT DATE:
  14.  
  15.   1.  Copy code into the HEAD section of document
  16.   2.  Add the onLoad event handler into the BODY tag
  17.   3.  Put last coding into the BODY section of document  -->
  18.  
  19. <!-- STEP ONE: Add code into HEAD section of document  -->
  20.  
  21. <HEAD>
  22.  
  23. <SCRIPT LANGUAGE="JavaScript">
  24. <!-- Original:  Richard Gorremans (RichardG@spiritwolfx.com) -->
  25. <!-- Web Site:  http://www.spiritwolfx.com -->
  26.  
  27.  
  28. <!-- Begin
  29. // Check browser version
  30. var isNav4 = false, isNav5 = false, isIE4 = false
  31. var strSeperator = "/"; 
  32. // If you are using any Java validation on the back side you will want to use the / because 
  33. // Java date validations do not recognize the dash as a valid date separator.
  34. var vDateType = 3; // Global value for type of date format
  35. //                1 = mm/dd/yyyy
  36. //                2 = yyyy/dd/mm  (Unable to do date check at this time)
  37. //                3 = dd/mm/yyyy
  38. var vYearType = 4; //Set to 2 or 4 for number of digits in the year for Netscape
  39. var vYearLength = 2; // Set to 4 if you want to force the user to enter 4 digits for the year before validating.
  40. var err = 0; // Set the error code to a default of zero
  41. if(navigator.appName == "Netscape") {
  42. if (navigator.appVersion < "5") {
  43. isNav4 = true;
  44. isNav5 = false;
  45. }
  46. else
  47. if (navigator.appVersion > "4") {
  48. isNav4 = false;
  49. isNav5 = true;
  50.    }
  51. }
  52. else {
  53. isIE4 = true;
  54. }
  55. function DateFormat(vDateName, vDateValue, e, dateCheck, dateType) {
  56. vDateType = dateType;
  57. // vDateName = object name
  58. // vDateValue = value in the field being checked
  59. // e = event
  60. // dateCheck 
  61. // True  = Verify that the vDateValue is a valid date
  62. // False = Format values being entered into vDateValue only
  63. // vDateType
  64. // 1 = mm/dd/yyyy
  65. // 2 = yyyy/mm/dd
  66. // 3 = dd/mm/yyyy
  67. //Enter a tilde sign for the first number and you can check the variable information.
  68. if (vDateValue == "~") {
  69. alert("AppVersion = "+navigator.appVersion+" \nNav. 4 Version = "+isNav4+" \nNav. 5 Version = "+isNav5+" \nIE Version = "+isIE4+" \nYear Type = "+vYearType+" \nDate Type = "+vDateType+" \nSeparator = "+strSeperator);
  70. vDateName.value = "";
  71. vDateName.focus();
  72. return true;
  73. }
  74. var whichCode = (window.Event) ? e.which : e.keyCode;
  75. // Check to see if a seperator is already present.
  76. // bypass the date if a seperator is present and the length greater than 8
  77. if (vDateValue.length > 8 && isNav4) {
  78. if ((vDateValue.indexOf("-") >= 1) || (vDateValue.indexOf("/") >= 1))
  79. return true;
  80. }
  81. //Eliminate all the ASCII codes that are not valid
  82. var alphaCheck = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/-";
  83. if (alphaCheck.indexOf(vDateValue) >= 1) {
  84. if (isNav4) {
  85. vDateName.value = "";
  86. vDateName.focus();
  87. vDateName.select();
  88. return false;
  89. }
  90. else {
  91. vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
  92. return false;
  93.    }
  94. }
  95. if (whichCode == 8) //Ignore the Netscape value for backspace. IE has no value
  96. return false;
  97. else {
  98. //Create numeric string values for 0123456789/
  99. //The codes provided include both keyboard and keypad values
  100. var strCheck = '47,48,49,50,51,52,53,54,55,56,57,58,59,95,96,97,98,99,100,101,102,103,104,105';
  101. if (strCheck.indexOf(whichCode) != -1) {
  102. if (isNav4) {
  103. if (((vDateValue.length < 6 && dateCheck) || (vDateValue.length == 7 && dateCheck)) && (vDateValue.length >=1)) {
  104. alert("Invalid Date\nPlease Re-Enter");
  105. vDateName.value = "";
  106. vDateName.focus();
  107. vDateName.select();
  108. return false;
  109. }
  110. if (vDateValue.length == 6 && dateCheck) {
  111. var mDay = vDateName.value.substr(2,2);
  112. var mMonth = vDateName.value.substr(0,2);
  113. var mYear = vDateName.value.substr(4,4)
  114. //Turn a two digit year into a 4 digit year
  115. if (mYear.length == 2 && vYearType == 4) {
  116. var mToday = new Date();
  117. //If the year is greater than 30 years from now use 19, otherwise use 20
  118. var checkYear = mToday.getFullYear() + 30; 
  119. var mCheckYear = '20' + mYear;
  120. if (mCheckYear >= checkYear)
  121. mYear = '19' + mYear;
  122. else
  123. mYear = '20' + mYear;
  124. }
  125. var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
  126. if (!dateValid(vDateValueCheck)) {
  127. alert("Invalid Date\nPlease Re-Enter");
  128. vDateName.value = "";
  129. vDateName.focus();
  130. vDateName.select();
  131. return false;
  132. }
  133. return true;
  134. }
  135. else {
  136. // Reformat the date for validation and set date type to a 1
  137. if (vDateValue.length >= 8  && dateCheck) {
  138. if (vDateType == 1) // mmddyyyy
  139. {
  140. var mDay = vDateName.value.substr(2,2);
  141. var mMonth = vDateName.value.substr(0,2);
  142. var mYear = vDateName.value.substr(4,4)
  143. vDateName.value = mMonth+strSeperator+mDay+strSeperator+mYear;
  144. }
  145. if (vDateType == 2) // yyyymmdd
  146. {
  147. var mYear = vDateName.value.substr(0,4)
  148. var mMonth = vDateName.value.substr(4,2);
  149. var mDay = vDateName.value.substr(6,2);
  150. vDateName.value = mYear+strSeperator+mMonth+strSeperator+mDay;
  151. }
  152. if (vDateType == 3) // ddmmyyyy
  153. {
  154. var mMonth = vDateName.value.substr(2,2);
  155. var mDay = vDateName.value.substr(0,2);
  156. var mYear = vDateName.value.substr(4,4)
  157. vDateName.value = mDay+strSeperator+mMonth+strSeperator+mYear;
  158. }
  159. //Create a temporary variable for storing the DateType and change
  160. //the DateType to a 1 for validation.
  161. var vDateTypeTemp = vDateType;
  162. vDateType = 1;
  163. var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
  164. if (!dateValid(vDateValueCheck)) {
  165. alert("Invalid Date\nPlease Re-Enter");
  166. vDateType = vDateTypeTemp;
  167. vDateName.value = "";
  168. vDateName.focus();
  169. vDateName.select();
  170. return false;
  171. }
  172. vDateType = vDateTypeTemp;
  173. return true;
  174. }
  175. else {
  176. if (((vDateValue.length < 8 && dateCheck) || (vDateValue.length == 9 && dateCheck)) && (vDateValue.length >=1)) {
  177. alert("Invalid Date\nPlease Re-Enter");
  178. vDateName.value = "";
  179. vDateName.focus();
  180. vDateName.select();
  181. return false;
  182.          }
  183.       }
  184.    }
  185. }
  186. else {
  187. // Non isNav Check
  188. if (((vDateValue.length < 8 && dateCheck) || (vDateValue.length == 9 && dateCheck)) && (vDateValue.length >=1)) {
  189. alert("Invalid Date\nPlease Re-Enter");
  190. vDateName.value = "";
  191. vDateName.focus();
  192. return true;
  193. }
  194. // Reformat date to format that can be validated. mm/dd/yyyy
  195. if (vDateValue.length >= 8 && dateCheck) {
  196. // Additional date formats can be entered here and parsed out to
  197. // a valid date format that the validation routine will recognize.
  198. if (vDateType == 1) // mm/dd/yyyy
  199. {
  200. var mMonth = vDateName.value.substr(0,2);
  201. var mDay = vDateName.value.substr(3,2);
  202. var mYear = vDateName.value.substr(6,4)
  203. }
  204. if (vDateType == 2) // yyyy/mm/dd
  205. {
  206. var mYear = vDateName.value.substr(0,4)
  207. var mMonth = vDateName.value.substr(5,2);
  208. var mDay = vDateName.value.substr(8,2);
  209. }
  210. if (vDateType == 3) // dd/mm/yyyy
  211. {
  212. var mDay = vDateName.value.substr(0,2);
  213. var mMonth = vDateName.value.substr(3,2);
  214. var mYear = vDateName.value.substr(6,4)
  215. }
  216. if (vYearLength == 4) {
  217. if (mYear.length < 4) {
  218. alert("Invalid Date\nPlease Re-Enter");
  219. vDateName.value = "";
  220. vDateName.focus();
  221. return true;
  222.    }
  223. }
  224. // Create temp. variable for storing the current vDateType
  225. var vDateTypeTemp = vDateType;
  226. // Change vDateType to a 1 for standard date format for validation
  227. // Type will be changed back when validation is completed.
  228. vDateType = 1;
  229. // Store reformatted date to new variable for validation.
  230. var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
  231. if (mYear.length == 2 && vYearType == 4 && dateCheck) {
  232. //Turn a two digit year into a 4 digit year
  233. var mToday = new Date();
  234. //If the year is greater than 30 years from now use 19, otherwise use 20
  235. var checkYear = mToday.getFullYear() + 30; 
  236. var mCheckYear = '20' + mYear;
  237. if (mCheckYear >= checkYear)
  238. mYear = '19' + mYear;
  239. else
  240. mYear = '20' + mYear;
  241. vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
  242. // Store the new value back to the field.  This function will
  243. // not work with date type of 2 since the year is entered first.
  244. if (vDateTypeTemp == 1) // mm/dd/yyyy
  245. vDateName.value = mMonth+strSeperator+mDay+strSeperator+mYear;
  246. if (vDateTypeTemp == 3) // dd/mm/yyyy
  247. vDateName.value = mDay+strSeperator+mMonth+strSeperator+mYear;
  248. if (!dateValid(vDateValueCheck)) {
  249. alert("Invalid Date\nPlease Re-Enter");
  250. vDateType = vDateTypeTemp;
  251. vDateName.value = "";
  252. vDateName.focus();
  253. return true;
  254. }
  255. vDateType = vDateTypeTemp;
  256. return true;
  257. }
  258. else {
  259. if (vDateType == 1) {
  260. if (vDateValue.length == 2) {
  261. vDateName.value = vDateValue+strSeperator;
  262. }
  263. if (vDateValue.length == 5) {
  264. vDateName.value = vDateValue+strSeperator;
  265.    }
  266. }
  267. if (vDateType == 2) {
  268. if (vDateValue.length == 4) {
  269. vDateName.value = vDateValue+strSeperator;
  270. }
  271. if (vDateValue.length == 7) {
  272. vDateName.value = vDateValue+strSeperator;
  273.    }
  274. if (vDateType == 3) {
  275. if (vDateValue.length == 2) {
  276. vDateName.value = vDateValue+strSeperator;
  277. }
  278. if (vDateValue.length == 5) {
  279. vDateName.value = vDateValue+strSeperator;
  280.    }
  281. }
  282. return true;
  283.    }
  284. }
  285. if (vDateValue.length == 10&& dateCheck) {
  286. if (!dateValid(vDateName)) {
  287. // Un-comment the next line of code for debugging the dateValid() function error messages
  288. //alert(err);  
  289. alert("Invalid Date\nPlease Re-Enter");
  290. vDateName.focus();
  291. vDateName.select();
  292.    }
  293. }
  294. return false;
  295. }
  296. else {
  297. // If the value is not in the string return the string minus the last
  298. // key entered.
  299. if (isNav4) {
  300. vDateName.value = "";
  301. vDateName.focus();
  302. vDateName.select();
  303. return false;
  304. }
  305. else
  306. {
  307. vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
  308. return false;
  309.          }
  310.       }
  311.    }
  312. }
  313. function dateValid(objName) {
  314. var strDate;
  315. var strDateArray;
  316. var strDay;
  317. var strMonth;
  318. var strYear;
  319. var intday;
  320. var intMonth;
  321. var intYear;
  322. var booFound = false;
  323. var datefield = objName;
  324. var strSeparatorArray = new Array("-"," ","/",".");
  325. var intElementNr;
  326. // var err = 0;
  327. var strMonthArray = new Array(12);
  328. strMonthArray[0] = "Jan";
  329. strMonthArray[1] = "Feb";
  330. strMonthArray[2] = "Mar";
  331. strMonthArray[3] = "Apr";
  332. strMonthArray[4] = "May";
  333. strMonthArray[5] = "Jun";
  334. strMonthArray[6] = "Jul";
  335. strMonthArray[7] = "Aug";
  336. strMonthArray[8] = "Sep";
  337. strMonthArray[9] = "Oct";
  338. strMonthArray[10] = "Nov";
  339. strMonthArray[11] = "Dec";
  340. //strDate = datefield.value;
  341. strDate = objName;
  342. if (strDate.length < 1) {
  343. return true;
  344. }
  345. for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
  346. if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
  347. strDateArray = strDate.split(strSeparatorArray[intElementNr]);
  348. if (strDateArray.length != 3) {
  349. err = 1;
  350. return false;
  351. }
  352. else {
  353. strDay = strDateArray[0];
  354. strMonth = strDateArray[1];
  355. strYear = strDateArray[2];
  356. }
  357. booFound = true;
  358.    }
  359. }
  360. if (booFound == false) {
  361. if (strDate.length>5) {
  362. strDay = strDate.substr(0, 2);
  363. strMonth = strDate.substr(2, 2);
  364. strYear = strDate.substr(4);
  365.    }
  366. }
  367. //Adjustment for short years entered
  368. if (strYear.length == 2) {
  369. strYear = '20' + strYear;
  370. }
  371. strTemp = strDay;
  372. strDay = strMonth;
  373. strMonth = strTemp;
  374. intday = parseInt(strDay, 10);
  375. if (isNaN(intday)) {
  376. err = 2;
  377. return false;
  378. }
  379. intMonth = parseInt(strMonth, 10);
  380. if (isNaN(intMonth)) {
  381. for (i = 0;i<12;i++) {
  382. if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
  383. intMonth = i+1;
  384. strMonth = strMonthArray[i];
  385. i = 12;
  386.    }
  387. }
  388. if (isNaN(intMonth)) {
  389. err = 3;
  390. return false;
  391.    }
  392. }
  393. intYear = parseInt(strYear, 10);
  394. if (isNaN(intYear)) {
  395. err = 4;
  396. return false;
  397. }
  398. if (intMonth>12 || intMonth<1) {
  399. err = 5;
  400. return false;
  401. }
  402. if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
  403. err = 6;
  404. return false;
  405. }
  406. if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
  407. err = 7;
  408. return false;
  409. }
  410. if (intMonth == 2) {
  411. if (intday < 1) {
  412. err = 8;
  413. return false;
  414. }
  415. if (LeapYear(intYear) == true) {
  416. if (intday > 29) {
  417. err = 9;
  418. return false;
  419.    }
  420. }
  421. else {
  422. if (intday > 28) {
  423. err = 10;
  424. return false;
  425.       }
  426.    }
  427. }
  428. return true;
  429. }
  430. function LeapYear(intYear) {
  431. if (intYear % 100 == 0) {
  432. if (intYear % 400 == 0) { return true; }
  433. }
  434. else {
  435. if ((intYear % 4) == 0) { return true; }
  436. }
  437. return false;
  438. }
  439. //  End -->
  440. </script>
  441.  
  442. </HEAD>
  443.  
  444. <!-- STEP TWO: Insert the onLoad event handler into your BODY tag  -->
  445.  
  446. <BODY onLoad="document.dateTest.testDateFormat1.focus()">
  447.  
  448. <!-- STEP THREE: Copy code into BODY section of document  -->
  449.  
  450. <form name=dateTest>
  451. <table border=0 width=400>
  452. <tr>
  453. <td>
  454. <table align=center border=1 width=400>
  455. <tr>
  456. <td bgcolor=blue width=75%>
  457. <font color=yellow>Enter 1st. Date - mm/dd/yyyy Format</font>
  458. </td>
  459. <td>
  460. <input type="text" name="testDateFormat1" size='10' maxlength="10" onFocus="javascript:vDateType='1'" onKeyUp="DateFormat(this,this.value,event,false,'1')" onBlur="DateFormat(this,this.value,event,true,'1')">
  461. </td>
  462. </tr>
  463. </table>
  464. </td>
  465. </tr>
  466. <tr>
  467. <td>
  468. <table align=center border=1 width=400>
  469. <tr>
  470. <td bgcolor=blue width=75%>
  471. <font color=yellow>Enter 2nd. Date - yyyy/mm/dd Format</font>
  472. </td>
  473. <td>
  474. <input type="text" name="testDateFormat3" size='10' maxlength="10" onFocus="javascript:vDateType='2'" onKeyUp="DateFormat(this,this.value,event,false,'2')" onBlur="DateFormat(this,this.value,event,true,'2')">
  475. </td>
  476. </tr>
  477. </table>
  478. </td>
  479. </tr>
  480. <tr>
  481. <td>
  482. <table align=center border=1 width=400>
  483. <tr>
  484. <td bgcolor=blue width=75%>
  485. <font color=yellow>Enter 3rd. Date - dd/mm/yyyy Format</font>
  486. </td>
  487. <td>
  488. <input type="text" name="testDateFormat5" size='10' maxlength="10" onFocus="javascript:vDateType='3'" onKeyUp="DateFormat(this,this.value,event,false,'3')" onBlur="DateFormat(this,this.value,event,true,'3')">
  489. </td>
  490. </tr>
  491. </table>
  492. </td>
  493. </tr>
  494. <tr>
  495. <td>
  496. <table border=1>
  497. <tr>
  498. <td bgcolor=blue align=center>
  499. <font size=+1 color=yellow>Automatic Formatting For Date Fields</font>
  500. </td>
  501. </tr>
  502. <tr>
  503. <td>
  504. <table border=0>
  505. <tr>
  506. <td>
  507. <b>Navigator 4.x versions</b>
  508. </td> 
  509. <td>
  510. Formatting will happen when all 8 numbers are entered.
  511. </td>
  512. </tr>
  513. <tr>
  514. <td>
  515. <b>Navigator 6.x versions</b>
  516. </td>
  517. <td>
  518. Formatting will happen as you enter the numbers.
  519. </td>
  520. </tr>
  521. <tr>
  522. <td>
  523. <b>IE versions</b>
  524. </td>
  525. <td>
  526. Formatting will happen as you enter the numbers.
  527. </td>
  528. </tr>
  529. </table>
  530. </td>
  531. </tr>
  532. <tr>
  533. <td align=center bgcolor=silver>
  534. <font size=+1 color=blue>Date Validation Will Occur As You Leave Field</font>
  535. </td>
  536. </tr>
  537. </table>
  538. </td>
  539. </tr>
  540. </table>
  541. </form>
  542.  
  543.  
  544.  
  545. <!-- END OF SCRIPT -->
  546. <!/SCRIPT>
  547.  
  548. <!PREVIEW>
  549. <!-- START OF SCRIPT -->
  550.  
  551. <!-- HOW TO INSTALL FORMAT DATE:
  552.  
  553.   1.  Copy code into the HEAD section of document
  554.   2.  Add the onLoad event handler into the BODY tag
  555.   3.  Put last coding into the BODY section of document  -->
  556.  
  557. <!-- STEP ONE: Add code into HEAD section of document  -->
  558.  
  559. <HEAD>
  560.  
  561. <SCRIPT LANGUAGE="JavaScript">
  562. <!-- Original:  Richard Gorremans (RichardG@spiritwolfx.com) -->
  563. <!-- Web Site:  http://www.spiritwolfx.com -->
  564.  
  565.  
  566. <!-- Begin
  567. // Check browser version
  568. var isNav4 = false, isNav5 = false, isIE4 = false
  569. var strSeperator = "/"; 
  570. // If you are using any Java validation on the back side you will want to use the / because 
  571. // Java date validations do not recognize the dash as a valid date separator.
  572. var vDateType = 3; // Global value for type of date format
  573. //                1 = mm/dd/yyyy
  574. //                2 = yyyy/dd/mm  (Unable to do date check at this time)
  575. //                3 = dd/mm/yyyy
  576. var vYearType = 4; //Set to 2 or 4 for number of digits in the year for Netscape
  577. var vYearLength = 2; // Set to 4 if you want to force the user to enter 4 digits for the year before validating.
  578. var err = 0; // Set the error code to a default of zero
  579. if(navigator.appName == "Netscape") {
  580. if (navigator.appVersion < "5") {
  581. isNav4 = true;
  582. isNav5 = false;
  583. }
  584. else
  585. if (navigator.appVersion > "4") {
  586. isNav4 = false;
  587. isNav5 = true;
  588.    }
  589. }
  590. else {
  591. isIE4 = true;
  592. }
  593. function DateFormat(vDateName, vDateValue, e, dateCheck, dateType) {
  594. vDateType = dateType;
  595. // vDateName = object name
  596. // vDateValue = value in the field being checked
  597. // e = event
  598. // dateCheck 
  599. // True  = Verify that the vDateValue is a valid date
  600. // False = Format values being entered into vDateValue only
  601. // vDateType
  602. // 1 = mm/dd/yyyy
  603. // 2 = yyyy/mm/dd
  604. // 3 = dd/mm/yyyy
  605. //Enter a tilde sign for the first number and you can check the variable information.
  606. if (vDateValue == "~") {
  607. alert("AppVersion = "+navigator.appVersion+" \nNav. 4 Version = "+isNav4+" \nNav. 5 Version = "+isNav5+" \nIE Version = "+isIE4+" \nYear Type = "+vYearType+" \nDate Type = "+vDateType+" \nSeparator = "+strSeperator);
  608. vDateName.value = "";
  609. vDateName.focus();
  610. return true;
  611. }
  612. var whichCode = (window.Event) ? e.which : e.keyCode;
  613. // Check to see if a seperator is already present.
  614. // bypass the date if a seperator is present and the length greater than 8
  615. if (vDateValue.length > 8 && isNav4) {
  616. if ((vDateValue.indexOf("-") >= 1) || (vDateValue.indexOf("/") >= 1))
  617. return true;
  618. }
  619. //Eliminate all the ASCII codes that are not valid
  620. var alphaCheck = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/-";
  621. if (alphaCheck.indexOf(vDateValue) >= 1) {
  622. if (isNav4) {
  623. vDateName.value = "";
  624. vDateName.focus();
  625. vDateName.select();
  626. return false;
  627. }
  628. else {
  629. vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
  630. return false;
  631.    }
  632. }
  633. if (whichCode == 8) //Ignore the Netscape value for backspace. IE has no value
  634. return false;
  635. else {
  636. //Create numeric string values for 0123456789/
  637. //The codes provided include both keyboard and keypad values
  638. var strCheck = '47,48,49,50,51,52,53,54,55,56,57,58,59,95,96,97,98,99,100,101,102,103,104,105';
  639. if (strCheck.indexOf(whichCode) != -1) {
  640. if (isNav4) {
  641. if (((vDateValue.length < 6 && dateCheck) || (vDateValue.length == 7 && dateCheck)) && (vDateValue.length >=1)) {
  642. alert("Invalid Date\nPlease Re-Enter");
  643. vDateName.value = "";
  644. vDateName.focus();
  645. vDateName.select();
  646. return false;
  647. }
  648. if (vDateValue.length == 6 && dateCheck) {
  649. var mDay = vDateName.value.substr(2,2);
  650. var mMonth = vDateName.value.substr(0,2);
  651. var mYear = vDateName.value.substr(4,4)
  652. //Turn a two digit year into a 4 digit year
  653. if (mYear.length == 2 && vYearType == 4) {
  654. var mToday = new Date();
  655. //If the year is greater than 30 years from now use 19, otherwise use 20
  656. var checkYear = mToday.getFullYear() + 30; 
  657. var mCheckYear = '20' + mYear;
  658. if (mCheckYear >= checkYear)
  659. mYear = '19' + mYear;
  660. else
  661. mYear = '20' + mYear;
  662. }
  663. var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
  664. if (!dateValid(vDateValueCheck)) {
  665. alert("Invalid Date\nPlease Re-Enter");
  666. vDateName.value = "";
  667. vDateName.focus();
  668. vDateName.select();
  669. return false;
  670. }
  671. return true;
  672. }
  673. else {
  674. // Reformat the date for validation and set date type to a 1
  675. if (vDateValue.length >= 8  && dateCheck) {
  676. if (vDateType == 1) // mmddyyyy
  677. {
  678. var mDay = vDateName.value.substr(2,2);
  679. var mMonth = vDateName.value.substr(0,2);
  680. var mYear = vDateName.value.substr(4,4)
  681. vDateName.value = mMonth+strSeperator+mDay+strSeperator+mYear;
  682. }
  683. if (vDateType == 2) // yyyymmdd
  684. {
  685. var mYear = vDateName.value.substr(0,4)
  686. var mMonth = vDateName.value.substr(4,2);
  687. var mDay = vDateName.value.substr(6,2);
  688. vDateName.value = mYear+strSeperator+mMonth+strSeperator+mDay;
  689. }
  690. if (vDateType == 3) // ddmmyyyy
  691. {
  692. var mMonth = vDateName.value.substr(2,2);
  693. var mDay = vDateName.value.substr(0,2);
  694. var mYear = vDateName.value.substr(4,4)
  695. vDateName.value = mDay+strSeperator+mMonth+strSeperator+mYear;
  696. }
  697. //Create a temporary variable for storing the DateType and change
  698. //the DateType to a 1 for validation.
  699. var vDateTypeTemp = vDateType;
  700. vDateType = 1;
  701. var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
  702. if (!dateValid(vDateValueCheck)) {
  703. alert("Invalid Date\nPlease Re-Enter");
  704. vDateType = vDateTypeTemp;
  705. vDateName.value = "";
  706. vDateName.focus();
  707. vDateName.select();
  708. return false;
  709. }
  710. vDateType = vDateTypeTemp;
  711. return true;
  712. }
  713. else {
  714. if (((vDateValue.length < 8 && dateCheck) || (vDateValue.length == 9 && dateCheck)) && (vDateValue.length >=1)) {
  715. alert("Invalid Date\nPlease Re-Enter");
  716. vDateName.value = "";
  717. vDateName.focus();
  718. vDateName.select();
  719. return false;
  720.          }
  721.       }
  722.    }
  723. }
  724. else {
  725. // Non isNav Check
  726. if (((vDateValue.length < 8 && dateCheck) || (vDateValue.length == 9 && dateCheck)) && (vDateValue.length >=1)) {
  727. alert("Invalid Date\nPlease Re-Enter");
  728. vDateName.value = "";
  729. vDateName.focus();
  730. return true;
  731. }
  732. // Reformat date to format that can be validated. mm/dd/yyyy
  733. if (vDateValue.length >= 8 && dateCheck) {
  734. // Additional date formats can be entered here and parsed out to
  735. // a valid date format that the validation routine will recognize.
  736. if (vDateType == 1) // mm/dd/yyyy
  737. {
  738. var mMonth = vDateName.value.substr(0,2);
  739. var mDay = vDateName.value.substr(3,2);
  740. var mYear = vDateName.value.substr(6,4)
  741. }
  742. if (vDateType == 2) // yyyy/mm/dd
  743. {
  744. var mYear = vDateName.value.substr(0,4)
  745. var mMonth = vDateName.value.substr(5,2);
  746. var mDay = vDateName.value.substr(8,2);
  747. }
  748. if (vDateType == 3) // dd/mm/yyyy
  749. {
  750. var mDay = vDateName.value.substr(0,2);
  751. var mMonth = vDateName.value.substr(3,2);
  752. var mYear = vDateName.value.substr(6,4)
  753. }
  754. if (vYearLength == 4) {
  755. if (mYear.length < 4) {
  756. alert("Invalid Date\nPlease Re-Enter");
  757. vDateName.value = "";
  758. vDateName.focus();
  759. return true;
  760.    }
  761. }
  762. // Create temp. variable for storing the current vDateType
  763. var vDateTypeTemp = vDateType;
  764. // Change vDateType to a 1 for standard date format for validation
  765. // Type will be changed back when validation is completed.
  766. vDateType = 1;
  767. // Store reformatted date to new variable for validation.
  768. var vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
  769. if (mYear.length == 2 && vYearType == 4 && dateCheck) {
  770. //Turn a two digit year into a 4 digit year
  771. var mToday = new Date();
  772. //If the year is greater than 30 years from now use 19, otherwise use 20
  773. var checkYear = mToday.getFullYear() + 30; 
  774. var mCheckYear = '20' + mYear;
  775. if (mCheckYear >= checkYear)
  776. mYear = '19' + mYear;
  777. else
  778. mYear = '20' + mYear;
  779. vDateValueCheck = mMonth+strSeperator+mDay+strSeperator+mYear;
  780. // Store the new value back to the field.  This function will
  781. // not work with date type of 2 since the year is entered first.
  782. if (vDateTypeTemp == 1) // mm/dd/yyyy
  783. vDateName.value = mMonth+strSeperator+mDay+strSeperator+mYear;
  784. if (vDateTypeTemp == 3) // dd/mm/yyyy
  785. vDateName.value = mDay+strSeperator+mMonth+strSeperator+mYear;
  786. if (!dateValid(vDateValueCheck)) {
  787. alert("Invalid Date\nPlease Re-Enter");
  788. vDateType = vDateTypeTemp;
  789. vDateName.value = "";
  790. vDateName.focus();
  791. return true;
  792. }
  793. vDateType = vDateTypeTemp;
  794. return true;
  795. }
  796. else {
  797. if (vDateType == 1) {
  798. if (vDateValue.length == 2) {
  799. vDateName.value = vDateValue+strSeperator;
  800. }
  801. if (vDateValue.length == 5) {
  802. vDateName.value = vDateValue+strSeperator;
  803.    }
  804. }
  805. if (vDateType == 2) {
  806. if (vDateValue.length == 4) {
  807. vDateName.value = vDateValue+strSeperator;
  808. }
  809. if (vDateValue.length == 7) {
  810. vDateName.value = vDateValue+strSeperator;
  811.    }
  812. if (vDateType == 3) {
  813. if (vDateValue.length == 2) {
  814. vDateName.value = vDateValue+strSeperator;
  815. }
  816. if (vDateValue.length == 5) {
  817. vDateName.value = vDateValue+strSeperator;
  818.    }
  819. }
  820. return true;
  821.    }
  822. }
  823. if (vDateValue.length == 10&& dateCheck) {
  824. if (!dateValid(vDateName)) {
  825. // Un-comment the next line of code for debugging the dateValid() function error messages
  826. //alert(err);  
  827. alert("Invalid Date\nPlease Re-Enter");
  828. vDateName.focus();
  829. vDateName.select();
  830.    }
  831. }
  832. return false;
  833. }
  834. else {
  835. // If the value is not in the string return the string minus the last
  836. // key entered.
  837. if (isNav4) {
  838. vDateName.value = "";
  839. vDateName.focus();
  840. vDateName.select();
  841. return false;
  842. }
  843. else
  844. {
  845. vDateName.value = vDateName.value.substr(0, (vDateValue.length-1));
  846. return false;
  847.          }
  848.       }
  849.    }
  850. }
  851. function dateValid(objName) {
  852. var strDate;
  853. var strDateArray;
  854. var strDay;
  855. var strMonth;
  856. var strYear;
  857. var intday;
  858. var intMonth;
  859. var intYear;
  860. var booFound = false;
  861. var datefield = objName;
  862. var strSeparatorArray = new Array("-"," ","/",".");
  863. var intElementNr;
  864. // var err = 0;
  865. var strMonthArray = new Array(12);
  866. strMonthArray[0] = "Jan";
  867. strMonthArray[1] = "Feb";
  868. strMonthArray[2] = "Mar";
  869. strMonthArray[3] = "Apr";
  870. strMonthArray[4] = "May";
  871. strMonthArray[5] = "Jun";
  872. strMonthArray[6] = "Jul";
  873. strMonthArray[7] = "Aug";
  874. strMonthArray[8] = "Sep";
  875. strMonthArray[9] = "Oct";
  876. strMonthArray[10] = "Nov";
  877. strMonthArray[11] = "Dec";
  878. //strDate = datefield.value;
  879. strDate = objName;
  880. if (strDate.length < 1) {
  881. return true;
  882. }
  883. for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
  884. if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
  885. strDateArray = strDate.split(strSeparatorArray[intElementNr]);
  886. if (strDateArray.length != 3) {
  887. err = 1;
  888. return false;
  889. }
  890. else {
  891. strDay = strDateArray[0];
  892. strMonth = strDateArray[1];
  893. strYear = strDateArray[2];
  894. }
  895. booFound = true;
  896.    }
  897. }
  898. if (booFound == false) {
  899. if (strDate.length>5) {
  900. strDay = strDate.substr(0, 2);
  901. strMonth = strDate.substr(2, 2);
  902. strYear = strDate.substr(4);
  903.    }
  904. }
  905. //Adjustment for short years entered
  906. if (strYear.length == 2) {
  907. strYear = '20' + strYear;
  908. }
  909. strTemp = strDay;
  910. strDay = strMonth;
  911. strMonth = strTemp;
  912. intday = parseInt(strDay, 10);
  913. if (isNaN(intday)) {
  914. err = 2;
  915. return false;
  916. }
  917. intMonth = parseInt(strMonth, 10);
  918. if (isNaN(intMonth)) {
  919. for (i = 0;i<12;i++) {
  920. if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
  921. intMonth = i+1;
  922. strMonth = strMonthArray[i];
  923. i = 12;
  924.    }
  925. }
  926. if (isNaN(intMonth)) {
  927. err = 3;
  928. return false;
  929.    }
  930. }
  931. intYear = parseInt(strYear, 10);
  932. if (isNaN(intYear)) {
  933. err = 4;
  934. return false;
  935. }
  936. if (intMonth>12 || intMonth<1) {
  937. err = 5;
  938. return false;
  939. }
  940. if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
  941. err = 6;
  942. return false;
  943. }
  944. if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
  945. err = 7;
  946. return false;
  947. }
  948. if (intMonth == 2) {
  949. if (intday < 1) {
  950. err = 8;
  951. return false;
  952. }
  953. if (LeapYear(intYear) == true) {
  954. if (intday > 29) {
  955. err = 9;
  956. return false;
  957.    }
  958. }
  959. else {
  960. if (intday > 28) {
  961. err = 10;
  962. return false;
  963.       }
  964.    }
  965. }
  966. return true;
  967. }
  968. function LeapYear(intYear) {
  969. if (intYear % 100 == 0) {
  970. if (intYear % 400 == 0) { return true; }
  971. }
  972. else {
  973. if ((intYear % 4) == 0) { return true; }
  974. }
  975. return false;
  976. }
  977. //  End -->
  978. </script>
  979.  
  980. </HEAD>
  981.  
  982. <!-- STEP TWO: Insert the onLoad event handler into your BODY tag  -->
  983.  
  984. <BODY onLoad="document.dateTest.testDateFormat1.focus()">
  985.  
  986. <!-- STEP THREE: Copy code into BODY section of document  -->
  987.  
  988. <form name=dateTest>
  989. <table border=0 width=400>
  990. <tr>
  991. <td>
  992. <table align=center border=1 width=400>
  993. <tr>
  994. <td bgcolor=blue width=75%>
  995. <font color=yellow>Enter 1st. Date - mm/dd/yyyy Format</font>
  996. </td>
  997. <td>
  998. <input type="text" name="testDateFormat1" size='10' maxlength="10" onFocus="javascript:vDateType='1'" onKeyUp="DateFormat(this,this.value,event,false,'1')" onBlur="DateFormat(this,this.value,event,true,'1')">
  999. </td>
  1000. </tr>
  1001. </table>
  1002. </td>
  1003. </tr>
  1004. <tr>
  1005. <td>
  1006. <table align=center border=1 width=400>
  1007. <tr>
  1008. <td bgcolor=blue width=75%>
  1009. <font color=yellow>Enter 2nd. Date - yyyy/mm/dd Format</font>
  1010. </td>
  1011. <td>
  1012. <input type="text" name="testDateFormat3" size='10' maxlength="10" onFocus="javascript:vDateType='2'" onKeyUp="DateFormat(this,this.value,event,false,'2')" onBlur="DateFormat(this,this.value,event,true,'2')">
  1013. </td>
  1014. </tr>
  1015. </table>
  1016. </td>
  1017. </tr>
  1018. <tr>
  1019. <td>
  1020. <table align=center border=1 width=400>
  1021. <tr>
  1022. <td bgcolor=blue width=75%>
  1023. <font color=yellow>Enter 3rd. Date - dd/mm/yyyy Format</font>
  1024. </td>
  1025. <td>
  1026. <input type="text" name="testDateFormat5" size='10' maxlength="10" onFocus="javascript:vDateType='3'" onKeyUp="DateFormat(this,this.value,event,false,'3')" onBlur="DateFormat(this,this.value,event,true,'3')">
  1027. </td>
  1028. </tr>
  1029. </table>
  1030. </td>
  1031. </tr>
  1032. <tr>
  1033. <td>
  1034. <table border=1>
  1035. <tr>
  1036. <td bgcolor=blue align=center>
  1037. <font size=+1 color=yellow>Automatic Formatting For Date Fields</font>
  1038. </td>
  1039. </tr>
  1040. <tr>
  1041. <td>
  1042. <table border=0>
  1043. <tr>
  1044. <td>
  1045. <b>Navigator 4.x versions</b>
  1046. </td> 
  1047. <td>
  1048. Formatting will happen when all 8 numbers are entered.
  1049. </td>
  1050. </tr>
  1051. <tr>
  1052. <td>
  1053. <b>Navigator 6.x versions</b>
  1054. </td>
  1055. <td>
  1056. Formatting will happen as you enter the numbers.
  1057. </td>
  1058. </tr>
  1059. <tr>
  1060. <td>
  1061. <b>IE versions</b>
  1062. </td>
  1063. <td>
  1064. Formatting will happen as you enter the numbers.
  1065. </td>
  1066. </tr>
  1067. </table>
  1068. </td>
  1069. </tr>
  1070. <tr>
  1071. <td align=center bgcolor=silver>
  1072. <font size=+1 color=blue>Date Validation Will Occur As You Leave Field</font>
  1073. </td>
  1074. </tr>
  1075. </table>
  1076. </td>
  1077. </tr>
  1078. </table>
  1079. </form>
  1080.  
  1081.  
  1082. <!-- END OF SCRIPT -->
  1083. <!/PREVIEW>
  1084.  
  1085. <!RELATED>NONE<!/RELATED>
  1086.